﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Qas.CommonLogic.BusinessObjects.Probability
{
    /// <summary>
    /// Оболочка над парой "Значение - количество экспериментов"
    /// Моделирование вероятностных распределений требует оболочки для анализа каждого результата
    /// Объект данного класса представляет собой пару, состояющую из результата и количества экспериментов,
    /// в ходе которых данный результат был получен
    /// </summary>
    /// <example>
    /// Все эксперименты, в ходе которых продолжительность задачи составляла N часов
    /// </example>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.1432")]
    [System.SerializableAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
    public class Pair
    {
        #region для Сериализации

        private int count;
        private double value;
        
        /// <summary>
        /// Конструктор для десериализации
        /// </summary>
        public Pair() 
        {
            // Пишем в лог о десериализации объекта
            LogicalLog.Write(LogicalLog.deserialization_message + this.GetType().Name);
        }

        #endregion

        /// <summary>
        /// Конструктор для работы в рамках системы
        /// </summary>
        public Pair(double val)
        {
            // Если мы создаём новую пару, то есть только 1 
            // эксперимент, когда было получено значение val
            this.count = 1;
            this.value = val;
        }

        /// <summary>
        /// Количество экспериментов, в которых достигалось данное значение
        /// </summary>
        [System.Xml.Serialization.XmlAttributeAttribute("count")]
        public int Count
        {
            get
            {
                return this.count;
            }
            set
            {
                this.count = value;
            }
        }

        /// <summary>
        /// Значение
        /// </summary>
        [System.Xml.Serialization.XmlAttributeAttribute("value")]
        public double Value
        {
            get
            {
                return this.value;
            }
            set
            {
                this.value = value;
            }
        }
    }
}
